import 'package:flutter/material.dart';
import 'package:flutter_screenutil/flutter_screenutil.dart';

import 'custom_underline_tab_indicator.dart';

const blackTextColor = Color(0xFF3E3E3E);
const lightBlackTextColor = Color(0xFF707070);
const greyTextColor = Color(0xFF999999);
const lightGreyTextColor = Color(0xFFA3A3A3);
const inputHitTextColor = Color(0xFFBDBDBD);
const goldenTextColor = Color(0xFFBA9767);

const dividerColor = Color(0xFFE6E6E6);
const disableButtonBg = Color(0xFFDBDBDB);

const inputFillColor = Color(0xFFF5F5F5);
const shadowColor = Color(0x1A000000);

const borderBtnColor = Color(0xFFE6C0C0);
const tabBgColor = Color(0xFFFEF4F5);
const btnBgColor = Color(0xFFFFFBFA);
const smallAlhGreyTextColor = Color.fromRGBO(150, 150, 150, 0.5);

const darkAlhBlackTextColor = Color.fromRGBO(61, 61, 61, 0.5);
const darkBlackTextColor = Color(0xFF3D3D3D);
const darkGreyTextColor = Color(0xFF575757);
const moreLightGreyTextColor = Color(0xFFA8A8A8);
const moreGreyTextColor = Color(0xFF808080);
const moreDartTextColor = Color.fromRGBO(0, 0, 0, 0.6);
const smallGreyTextColor = Color(0xFF969696);
const boxTextColor = Color(0xffB0926B);
const boxVioletColor = Color(0xffF1ECE6);
const deepGreyTextColor = Color(0x9F333333);
const deepBlackTextColor = Color(0xFF333333);

const buttonIgnoreColor = Color(0xFFF0F0F0);
const buttonIgnoreTextColor = Color(0xFF666666);
const progressBgColor = Color(0xFFF0F0F0);
const boxShapeColor = Color(0xFFCC4C49);
const boxBackgroundColor = Color(0xFFF4EDDE);
const boxBorderColor = Color(0xFFFDF7EA);

const MaterialColor mitColor = MaterialColor(
  _mitPrimaryColor,
  <int, Color>{
    50: Color(0xFFFFEBEE),
    100: Color(0xFFFFCDD2),
    200: Color(0xFFEF9A9A),
    300: Color(0xFFE57373),
    400: Color(0xFFEF5350),
    500: Color(_mitPrimaryColor),
    600: Color(0xFFE53935),
    700: Color(0xFFD32F2F),
    800: Color(0xFFC62828),
    900: Color(0xFFB71C1C),
  },
);
const int _mitPrimaryColor = 0xFFE44441;

/// brightness - Brightness类型，应用程序的整体主题亮度。用于按钮等小部件，以确定在不使用主色（primaryColor）或强调色（accentColor）时选择什么颜色。当亮度较暗时，画布、卡片和原色都较暗。当亮度为光时，画布和卡片的颜色是明亮的，原色的暗度根据原色亮度变化。当亮度较暗时，原色（primaryColor）与卡片和画布颜色的对比度较差;当亮度较暗时，用白色或亮蓝色来对比。

// primarySwatch - MaterialColor 类型，Material 主题中定义一种颜色，它具有十种颜色阴影的颜色样本。值越大颜色越深，10个有效的index分别为：50，100，200，…，900。默认是取中间值500。

// primaryColor - Color类型，App主要部分的背景色（ToolBar,Tabbar等）

// primaryColorBrightness - Brightness类型，primaryColor的亮度，用于确定设置在primaryColor上部的文本和图标颜色(如:工具栏文本(toolbar text))。

// primaryColorLight - Color类型，primaryColor的较浅版本

// primaryColorDark - Color类型，primaryColor的较深版本

// accentColor - Color类型，前景色(按钮、文本、覆盖边缘效果等)

// accentColorBrightness - Brightness类型，accentColor的亮度。用于确定位于accentColor上部的文本和图标颜色(例如，浮动操作按钮(FloatingButton)上的图标)

// canvasColor - Color类型，MaterialType.canvas Material的默认颜色。

// scaffoldBackgroundColor - Color类型，作为Scaffold下的Material默认颜色，用于materia应用程序或app内页面的背景色。

// bottomAppBarColor - Color类型，bottomAppBarColor的默认颜色。这可以通过指定BottomAppBar.color来覆盖。

// cardColor - Color类型，用在卡片(Card)上的Material的颜色。

// dividerColor - Color类型，分隔符(Dividers)和弹窗分隔符(PopupMenuDividers)的颜色，也用于ListTiles和DataTables的行之间。要创建使用这种颜色的合适的边界，请考虑Divider.createBorderSide。

// highlightColor - Color类型，用于墨水喷溅动画或指示菜单被选中时的高亮颜色

// splashColor - Color类型，墨水溅出的颜色

// splashFactory - InteractiveInkFeatureFactory类型，定义InkWall和InkResponse产成的墨水喷溅时的外观。

// selectedRowColor - Color类型，用于高亮选定行的颜色。

// unselectedWidgetColor - Color类型，小部件处于非活动(但启用)状态时使用的颜色。例如，未选中的复选框。通常与accentColor形成对比。

// disabledColor - Color类型，无效的部件(widget)的颜色，不管它们的状态如何。例如，一个禁用的复选框(可以选中或不选中)。

// buttonColor - Color类型，Material中RaisedButtons使用的默认填充色。

// buttonTheme - ButtonThemeData类型，定义按钮小部件的默认配置，如RaisedButton和FlatButton。

// secondaryHeaderColor - Color类型，有选定行时PaginatedDataTable标题的颜色

// textSelectionColor - Color类型，文本字段(如TextField)中文本被选中的颜色。

// cursorColor - Color类型，在 Material-style 文本字段(如TextField)中光标的颜色。

// textSelectionHandleColor - Color类型，用于调整当前选定文本部分的句柄的颜色。

// backgroundColor - Color类型，与primaryColor对比的颜色(例如 用作进度条的剩余部分)。

// dialogBackgroundColor - Color类型，Color类型，Dialog元素的背景色

// indicatorColor - Color类型，TabBar中选项选中的指示器颜色。

// hintColor - Color类型，用于提示文本或占位符文本的颜色，例如在TextField中。

// errorColor - Color类型，用于输入验证错误的颜色，例如在TextField中。

// toggleableActiveColor - Color类型，用于突出显示切换Widget（如Switch，Radio和Checkbox）的活动状态的颜色。

// fontFamily - String类型，字体类型

// textTheme - TextTheme类型，与卡片和画布对比的文本颜色

// primaryTextTheme - TextTheme类型，与primary color形成对比的文本主题。

// accentTextTheme - TextTheme类型，与accent color形成对比的文本主题。

// inputDecorationTheme - InputDecorationTheme类型，InputDecorator、TextField和TextFormField的默认InputDecoration值基于此主题。

// iconTheme - IconThemeData类型，与卡片和画布颜色形成对比的图标主题。

// primaryIconTheme - IconThemeData类型，与原色(primary color)形成对比的图标主题。

// accentIconTheme - IconThemeData类型,与前景色(accent color)形成对比的图标主题。

// sliderTheme - SliderThemeData类型，SliderThemeData类型，用于渲染Slider的颜色和形状。

// tabBarTheme - TabBarTheme类型, 一个主题，用于自定义选项卡栏指示器的尺寸、形状和颜色。

// chipTheme - ChipThemeData类型,用于Chip的颜色和样式

// platform - TargetPlatform类型,widget应该适应目标的平台。

// materialTapTargetSize - MaterialTapTargetSize类型,配置特定材料部件的hit测试大小。

// pageTransitionsTheme - PageTransitionsTheme类型,每个目标平台的默认MaterialPageRoute转换。

// colorScheme
// ColorScheme类型,一组13种颜色，可用于配置大多数组件的颜色属性。

/// typography - Typography类型,用于配置TextTheme、primaryTextTheme和accentTextTheme的颜色和几何文本主题值。

ThemeData get appThemeData => ThemeData(
      brightness: Brightness
          .light, // 应用程序的整体主题亮度。用于按钮等小部件，以确定在不使用主色（primaryColor）或强调色（accentColor）时选择什么颜色。当亮度较暗时，画布、卡片和原色都较暗。当亮度为光时，画布和卡片的颜色是明亮的，原色的暗度根据原色亮度变化。当亮度较暗时，原色（primaryColor）与卡片和画布颜色的对比度较差;当亮度较暗时，用白色或亮蓝色来对比
      primarySwatch:
          mitColor, // Material 主题中定义一种颜色，它具有十种颜色阴影的颜色样本。值越大颜色越深，10个有效的index分别为：50，100，200，…，900。默认是取中间值500
      primaryColor: mitColor, // 主要颜色: App主要部分的背景色（ToolBar,Tabbar等）
      accentColor: mitColor, // 前景色(按钮、文本、覆盖边缘效果等)
      primaryColorLight: mitColor, // primaryColor的较浅版本
      primaryColorDark: mitColor, // primaryColor的较深版本
      scaffoldBackgroundColor:
          Colors.white, // 作为Scaffold下的Material默认颜色，用于materia应用程序或app内页面的背景色
      // bottomAppBarColor: '', // bottomAppBarColor的默认颜色。这可以通过指定BottomAppBar.color来覆盖
      cardColor: Colors.white, // 用在卡片(Card)上的Material的颜色。
      dividerColor:
          dividerColor, // 分隔符(Dividers)和弹窗分隔符(PopupMenuDividers)的颜色，也用于ListTiles和DataTables的行之间。要创建使用这种颜色的合适的边界，请考虑Divider.createBorderSide
      highlightColor:
          Colors.transparent, //mitColor[100], // 用于墨水喷溅动画或指示菜单被选中时的高亮颜色
      splashColor: Colors.transparent, //mitColor[50], // 墨水溅出的颜色
      // splashFactory: InteractiveInkFeatureFactory(), // InteractiveInkFeatureFactory类型，定义InkWall和InkResponse产成的墨水喷溅时的外观
      // selectedRowColor: '', // 用于高亮选定行的颜色。
      // unselectedWidgetColor: '', // 小部件处于非活动(但启用)状态时使用的颜色。例如，未选中的复选框。通常与accentColor形成对比
      disabledColor:
          disableButtonBg, // 无效的部件(widget)的颜色，不管它们的状态如何。例如，一个禁用的复选框(可以选中或不选中)
      buttonColor: mitColor, // Material中RaisedButtons使用的默认填充色
      buttonTheme: buttonThemeData, // 定义按钮小部件的默认配置，如RaisedButton和FlatButton
      elevatedButtonTheme: elevatedButtonThemeData,
      outlinedButtonTheme: outlinedButtonThemeData,
      // secondaryHeaderColor: '', // 有选定行时PaginatedDataTable标题的颜色
      backgroundColor: mitColor, // 与primaryColor对比的颜色(例如 用作进度条的剩余部分)
      dialogBackgroundColor: Colors.white, // Dialog元素的背景色
      indicatorColor: mitColor, // TabBar中选项选中的指示器颜色
      errorColor: mitColor, // 用于输入验证错误的颜色，例如在TextField中
      toggleableActiveColor:
          mitColor, // 用于突出显示切换Widget（如Switch，Radio和Checkbox）的活动状态的颜色
      fontFamily: 'PingFangSC-Regular', // 字体类型
      appBarTheme: appBarTheme,
      cardTheme: cardTheme,
      textTheme: textTheme, // 与卡片和画布对比的文本颜色
      // textButtonTheme: textButtonTheme,
      textSelectionTheme: TextSelectionThemeData(),
      // primaryTextTheme: primaryTextTheme, // 与primary color形成对比的文本主题
      // accentTextTheme: accentTextTheme, // 与accent color形成对比的文本主题
      dialogTheme: dialogTheme,
      inputDecorationTheme:
          inputDecorationTheme, // InputDecorator、TextField和TextFormField的默认InputDecoration值基于此主题
      // iconTheme: '', // 与卡片和画布颜色形成对比的图标主题
      // primaryIconTheme: '', // 与原色(primary color)形成对比的图标主题
      // accentIconTheme: '', // 与前景色(accent color)形成对比的图标主题
      // sliderTheme: '', // SliderThemeData类型，用于渲染Slider的颜色和形状
      tabBarTheme: tabBarTheme, // 一个主题，用于自定义选项卡栏指示器的尺寸、形状和颜色
      // chipTheme: '', // 用于Chip的颜色和样式
      // platform: '',  // widget应该适应目标的平台
      // materialTapTargetSize: '', // 配置特定材料部件的hit测试大小
      // pageTransitionsTheme: '', // 每个目标平台的默认MaterialPageRoute转换
    );

AppBarTheme get appBarTheme => AppBarTheme(
      brightness: Brightness.dark,
      centerTitle: true,
      elevation: 0,
      iconTheme: IconThemeData(size: 24),
      textTheme: TextTheme(
        headline6: TextStyle(
          fontSize: ScreenUtil().setSp(20),
        ),
      ),
    );

CardTheme get cardTheme => CardTheme(
      clipBehavior: Clip.antiAliasWithSaveLayer,
      elevation: 8,
      shadowColor: shadowColor,
      margin: EdgeInsets.all(0),
      shape: RoundedRectangleBorder(
        borderRadius: BorderRadius.circular(8.0),
      ),
    );

ElevatedButtonThemeData get elevatedButtonThemeData => ElevatedButtonThemeData(
      style: ButtonStyle(
        padding:
            MaterialStateProperty.all<EdgeInsetsGeometry>(EdgeInsets.all(0)),
        elevation: MaterialStateProperty.all<double>(0.0),
        shape: MaterialStateProperty.all<OutlinedBorder>(
          RoundedRectangleBorder(borderRadius: BorderRadius.circular(6)),
        ),
      ),
    );

OutlinedButtonThemeData get outlinedButtonThemeData => OutlinedButtonThemeData(
      style: ButtonStyle(
        textStyle: MaterialStateProperty.all<TextStyle>(TextStyle()),
        padding:
            MaterialStateProperty.all<EdgeInsetsGeometry>(EdgeInsets.all(0)),
        elevation: MaterialStateProperty.all<double>(0.0),
        side: MaterialStateProperty.all<BorderSide>(
            BorderSide(width: 1.0, color: mitColor)),
        shape: MaterialStateProperty.all<OutlinedBorder>(
          RoundedRectangleBorder(
            borderRadius: BorderRadius.circular(8.0),
          ),
        ),
      ),
    );

TextButtonThemeData get textButtonThemeData => TextButtonThemeData(
      style: ButtonStyle(
        textStyle: MaterialStateProperty.all<TextStyle>(TextStyle(
          color: greyTextColor,
        )),
        padding:
            MaterialStateProperty.all<EdgeInsetsGeometry>(EdgeInsets.all(0)),
        elevation: MaterialStateProperty.all<double>(0.0),
        side: MaterialStateProperty.all<BorderSide>(
            BorderSide(width: 1.0, color: dividerColor)),
        shape: MaterialStateProperty.all<OutlinedBorder>(
          RoundedRectangleBorder(
            borderRadius: BorderRadius.circular(8.0),
          ),
        ),
      ),
    );

ButtonThemeData get buttonThemeData => ButtonThemeData(
      minWidth: 200,
      textTheme: ButtonTextTheme.accent,
      shape: RoundedRectangleBorder(borderRadius: BorderRadius.circular(8.0)),
      disabledColor: disableButtonBg,
    );

TextTheme get textTheme => TextTheme(
      // 标题1
      headline1: TextStyle(
        fontFamily: 'PingFangSC-Semibold',
        fontSize: ScreenUtil().setSp(30),
        color: blackTextColor,
      ),
      // 标题2
      headline2: TextStyle(
        fontFamily: 'PingFangSC-Semibold',
        fontSize: ScreenUtil().setSp(26),
        color: blackTextColor,
      ),
      // 标题3
      headline3: TextStyle(
        fontFamily: 'PingFangSC-Semibold',
        fontSize: ScreenUtil().setSp(24),
        color: blackTextColor,
      ),
      // 标题4
      headline4: TextStyle(
        fontFamily: 'PingFangSC-Semibold',
        fontSize: ScreenUtil().setSp(22),
        color: blackTextColor,
      ),
      // 标题5
      headline5: TextStyle(
        fontFamily: 'PingFangSC-Semibold',
        fontSize: ScreenUtil().setSp(20),
        color: blackTextColor,
      ),
      // 标题6Î
      headline6: TextStyle(
        fontFamily: 'PingFangSC-Semibold',
        fontSize: ScreenUtil().setSp(18),
        color: blackTextColor,
      ),
      // 副标题1
      subtitle1: TextStyle(
        fontFamily: 'PingFangSC-Semibold',
        fontSize: ScreenUtil().setSp(16),
        color: blackTextColor,
      ),
      // 副标题2
      subtitle2: TextStyle(
        fontFamily: 'PingFangSC-Regular',
        fontSize: ScreenUtil().setSp(16),
        color: blackTextColor,
      ),
      // 内容1
      bodyText1: TextStyle(
        fontFamily: 'PingFangSC-Semibold',
        fontSize: ScreenUtil().setSp(14),
        color: blackTextColor,
      ),
      // 内容2
      bodyText2: TextStyle(
        fontFamily: 'PingFangSC-Regular',
        fontSize: ScreenUtil().setSp(14),
        color: blackTextColor,
      ),
      // 图片说明文字
      caption: TextStyle(
        fontFamily: 'PingFangSC-Regular',
        fontSize: ScreenUtil().setSp(12),
        color: blackTextColor,
      ),
      // button
      button: TextStyle(
        fontSize: ScreenUtil().setSp(12),
        fontFamily: 'PingFangSC-Regular',
        color: blackTextColor,
      ),
      // 眉题
      overline: TextStyle(
        fontSize: ScreenUtil().setSp(12),
        fontFamily: 'PingFangSC-Regular',
        color: blackTextColor,
      ),
    );

TabBarTheme get tabBarTheme => TabBarTheme(
      indicator: CustomUnderlineTabIndicator(
        borderSide: BorderSide(
          width: 4,
          color: Colors.white,
        ),
        insets: EdgeInsets.only(
          bottom: ScreenUtil().setWidth(8),
        ),
      ),
      indicatorSize: TabBarIndicatorSize.label,
      labelColor: Colors.white,
      labelPadding: EdgeInsets.all(ScreenUtil().setWidth(2)),
      labelStyle: TextStyle(
        fontFamily: 'PingFangSC-Semibold',
        fontSize: ScreenUtil().setSp(16.0),
      ),
      unselectedLabelColor: Colors.white,
      unselectedLabelStyle: TextStyle(
        fontFamily: 'PingFangSC-Regular',
        fontSize: ScreenUtil().setSp(16.0),
      ),
    );

InputDecorationTheme get inputDecorationTheme => InputDecorationTheme(
      contentPadding: EdgeInsets.symmetric(
        horizontal: ScreenUtil().setSp(20.0),
        vertical: ScreenUtil().setSp(0.0),
      ),
      border: OutlineInputBorder(
        gapPadding: 0.0,
        borderSide: BorderSide(color: inputFillColor),
        borderRadius: BorderRadius.all(
          Radius.circular(6.0),
        ),
      ),
      errorBorder: OutlineInputBorder(
        gapPadding: 0.0,
        borderSide: BorderSide(color: inputFillColor),
        borderRadius: BorderRadius.all(
          Radius.circular(6.0),
        ),
      ),
      enabledBorder: OutlineInputBorder(
        gapPadding: 0.0,
        borderSide: BorderSide(color: inputFillColor),
        borderRadius: BorderRadius.all(
          Radius.circular(6.0),
        ),
      ),
      focusedBorder: OutlineInputBorder(
        gapPadding: 0.0,
        borderSide: BorderSide(color: inputFillColor),
        borderRadius: BorderRadius.all(
          Radius.circular(6.0),
        ),
      ),
      disabledBorder: OutlineInputBorder(
        gapPadding: 0.0,
        borderSide: BorderSide(color: inputFillColor),
        borderRadius: BorderRadius.all(
          Radius.circular(6.0),
        ),
      ),
      focusedErrorBorder: OutlineInputBorder(
        gapPadding: 0.0,
        borderSide: BorderSide(color: inputFillColor),
        borderRadius: BorderRadius.all(
          Radius.circular(6.0),
        ),
      ),
      filled: true,
      fillColor: inputFillColor,
      hintStyle: TextStyle(
          color: inputHitTextColor,
          fontSize: ScreenUtil().setSp(14),
          fontFamily: 'PingFangSC-Regular'),
    );

DialogTheme get dialogTheme => DialogTheme(
      backgroundColor: Colors.white,
      elevation: 0,
      shape: RoundedRectangleBorder(
        borderRadius: BorderRadius.circular(8.0),
      ),
    );
